package com.lagou.client;

import com.lagou.model.Questions;
import com.lagou.model.Student;
import com.lagou.model.StudentMessage;
import com.lagou.model.no;

import java.io.IOException;
import java.util.ArrayList;

/**
 * 编程实现客户端的主界面绘制和相应功能的实现
 */
public class ClientView {
    /**
     * 为了可以使用输入输出流，采用合成复用原则实现
     */
    private ClientInitClose cic;
    private LoginClient  loginClient;
    private ClientStudentModule studentModule;
    private ExamModule examModule;
    private  StudentMessage message;
    private  int Core;

    /**
     * 通过构造方法实现成员变量的初始化
     * @param cic
     */
    public ClientView(ClientInitClose cic, LoginClient loginClient, ClientStudentModule studentModule,ExamModule examModule) {
        this.cic = cic;
        this.loginClient=loginClient;
        this.studentModule=studentModule;
        this.examModule=examModule;
    }

    /**
     * 在线考试系统主界面的绘制
     */
    public void clientMainPage() throws IOException, ClassNotFoundException {
        while(true) {
            System.out.println("  \n\n\t\t   在线考试系统");
            System.out.println("-------------------------------------------");
            System.out.print("   [1] 学员系统");
            System.out.println("     [2] 管理员系统");
            System.out.println("   [0] 退出系统");
            System.out.println("-------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            //Scanner sc = new Scanner(System.in);
            //int choose = sc.nextInt();
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("正在进入学员系统...");
                    loginClient.clientStudentLogin(cic,this);
                    break;
                case 2:
                    //管理员登入
                    loginClient.clientManagerLogin(cic,this);
                    break;
                case 0:
                    cic.getOos().writeObject(new no());
                    System.out.println("成功退出系统...");
                    System.out.println("-------------------------------------");
                    System.out.println("-------------------------------------");
                    System.out.println("-------------------------------------");
                    System.out.println("-------------------------------------");
                   break;
                default:
                    System.out.println("输入错误，请重新选择！");
            }
        }
    }

    /**
    管理员系统主页面
     */
        public void ManagerPage() throws IOException, ClassNotFoundException {
           while(true) {
                System.out.println("  \n\n\t\t 你好，管理员");
                System.out.println("-------------------------------------------");
                System.out.print("   [1] 学员管理模块");
                System.out.println(" [2] 考题管理模块");
                System.out.println(" [0]返回线考试系统");
                System.out.println("-------------------------------------------");
                System.out.println("请选择要进行的业务编号：");
                int choose = ClientScanner.getScanner().nextInt();
                switch (choose) {
                    case 1:
                        System.out.println("正在进入学员管理模块...");

                         loginClient.managerOfStu(cic,this);
                        break;
                    case 2:
                         loginClient.managerOfExm(cic,this);
                        System.out.println("正在进入考题管理模块...");
                        break;
                    case 0:
                        cic.getOos().writeChar('d');
                        cic.getOos().flush();
                        System.out.println("返回线考试系统...");
                        return;
                    default:

                        System.out.println("输入错误，请重新选择！");
                }
            }
        }

    /**
     管理员学员模块页面
     */
    public void studentPage() throws IOException, ClassNotFoundException {
        while (true) {
            System.out.println("---------------欢迎进入学生管理模块---------------------------");
            System.out.println("请选择以下的操作");
            System.out.println("---------(1)增加学生的信息--------");
            System.out.println("---------(2)删除学生的信息--------");
            System.out.println("---------(3)修改学生的信息--------");
            System.out.println("---------(4)查询学生的信息--------");
            System.out.println("---------(5)查询学员全部的信息--------");
            System.out.println("---------(6)返回管理员页面--------");
            System.out.println("请输入你的选择");
           int choice = ClientScanner.getScanner().nextInt();
            switch (choice){
                case 1:
                    System.out.println("增加学生的信息");
                    cic.getOos().writeChar('a');
                    cic.getOos().flush();
                 //把要添加的学生对象输入服务器中
                  Student student= studentModule.add();
                    cic.getOos().writeObject(student);
                    System.out.println("添加成功");
                    break;
                case 2:    System.out.println("删除学生的信息");
                    cic.getOos().writeChar('b');
                    cic.getOos().flush();
                    //把要删除的学生对象输入服务器中
                    cic.getOos().writeObject(studentModule.delete());
                    System.out.println("删除成功");
                    break;
                case 3:  System.out.println("修改学生的信息");
                    cic.getOos().writeChar('c');
                    cic.getOos().flush();
                    //把要修改的学生对象输入服务器中
                    cic.getOos().writeObject(studentModule.update());
                    System.out.println("修改成功");
                    break;
                case 4:   System.out.println("查询学生的信息");
                    cic.getOos().writeChar('d');
                    cic.getOos().flush();
                    //把要查询的学生对象输入服务器中
                    cic.getOos().writeObject(studentModule.findOF());
                    System.out.println("查询成功");
                    System.out.println("查询结果为:"+cic.getOis().readObject());
                    break;

                case 5:   System.out.println("查询全部学生的信息");
                    cic.getOos().writeChar('e');
                    cic.getOos().flush();
                    //把要查询的学生对象输入服务器中
                  ArrayList<Student> a =(ArrayList<Student>) cic.getOis().readObject();
                    System.out.println("查询成功");
                    for (Student S:a
                         ) {
                        System.out.println(S);
                    }
                    break;
                case 6: System.out.println("返回管理员页面...");
                    cic.getOos().writeChar('f');
                    cic.getOos().flush();
                    return;

            }
        }
    }

    /**
     * 管理员考试模块页面
     */
    public void  examModuleOfMan() throws IOException, ClassNotFoundException {
        while (true) {
            System.out.println("---------------欢迎进入考题管理模块---------------------------");
            System.out.println("请选择以下的操作");
            System.out.println("---------(1)增加考题的信息--------");
            System.out.println("---------(2)删除考题的信息--------");
            System.out.println("---------(3)修改考题的信息--------");
            System.out.println("---------(4)查询考题的信息--------");
            System.out.println("---------(5)查询考题全部的信息--------");
            System.out.println("---------(6)返回管理员页面--------");
            System.out.println("请输入你的选择");
            int choice = ClientScanner.getScanner().nextInt();
            switch (choice){
                case 1:
                    System.out.println("增加考题的信息");
                    cic.getOos().writeChar('a');
                    cic.getOos().flush();
                    //把要添加的考题对象输入服务器中
                      Questions questions =examModule.add();
                    cic.getOos().writeObject(questions);
                    System.out.println("添加成功");
                    break;
                case 2:    System.out.println("考题学生的信息");
                    cic.getOos().writeChar('b');
                    cic.getOos().flush();
                    //把要删除的考题对象输入服务器中

                    cic.getOos().writeObject(examModule.delete());
                    System.out.println("删除成功");
                    break;
                case 3:  System.out.println("修改考题的信息");
                    cic.getOos().writeChar('c');
                    cic.getOos().flush();
                    //把要修改的学生对象输入服务器中
                    cic.getOos().writeObject(examModule.update());
                    System.out.println("修改成功");
                    break;
                case 4:   System.out.println("查询考题的信息");
                    cic.getOos().writeChar('d');
                    cic.getOos().flush();
                    //把要查询的考题对象输入服务器中
                    cic.getOos().writeObject(examModule.findOF());
                    System.out.println("查询成功");
                    System.out.println("查询结果为:"+cic.getOis().readObject());
                    break;

                case 5:   System.out.println("查询全部考题的信息");
                    cic.getOos().writeChar('e');
                    cic.getOos().flush();
                    //把要查询的考题对象输入服务器中
                    ArrayList<Questions> a =(ArrayList<Questions>) cic.getOis().readObject();
                    System.out.println("查询成功");
                    for (Questions Q:a
                    ) {
                        System.out.println(Q);
                    }
                    break;
                case 6: System.out.println("返回管理员页面...");
                    cic.getOos().writeChar('f');
                    cic.getOos().flush();
                    return;

            }
        }
    }

    /**
     * 用户模块页面
     */
    public  void   StudentPage() throws IOException, ClassNotFoundException {
        while(true) {
            System.out.println("  \n\n\t\t 你好，学员");
            System.out.println("-------------------------------------------");
            System.out.println(" [1] 修改密码");
            System.out.println(" [0] 退出");
            System.out.println("-------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("修改密码");
                    cic.getOos().writeChar('a');
                    cic.getOos().flush();
                    //把修改的密码的信息发给服务器
                    cic.getOos().writeObject(studentModule.updatePWD());
                    System.out.println("修改成功");
                    break;
                case 0:
                    cic.getOos().writeChar('k');
                    cic.getOos().flush();
                    return;
                default:
                    System.out.println("输入错误，请重新选择！");
            }
        }
    }

    /**
     学员用户系统主页面
     */
    public void userPage() throws IOException, ClassNotFoundException {
        while(true) {
            System.out.println("  \n\n\t\t 你好，学员");
            System.out.println("-------------------------------------------");
            System.out.print("   [1] 用户模块");
            System.out.println(" [2] 考题模块");
            System.out.println(" [0]返回学员系统");
            System.out.println("-------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("正在进入用户模块...");
                    cic.getOos().writeChar('A');
                    cic.getOos().flush();
                    StudentPage();
                    break;
                case 2:
                    System.out.println("正在进入考题模块...");
                    cic.getOos().writeChar('B');
                    cic.getOos().flush();

                    examModuleOfStu();
                    break;
                case 0:
                    cic.getOos().writeChar('F');
                    cic.getOos().flush();
                    System.out.println("返回线考试系统...");
                    return;
                default:

                    System.out.println("输入错误，请重新选择！");
            }
        }
    }

    /**
     * 学员考试模块页面
     */
    public void  examModuleOfStu() throws IOException, ClassNotFoundException {
       while (true){
            System.out.println("  \n\n\t\t 你好，学员");
            System.out.println("-------------------------------------------");
            System.out.println(" [1]开始考试");
            System.out.println(" [2]导出成绩");
            System.out.println(" [3]查询成绩");
            System.out.println(" [0] 退出");
            System.out.println("-------------------------------------------");
            System.out.println("请选择要进行的业务编号：");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    System.out.println("开始考试");
                    cic.getOos().writeChar('y');
                    cic.getOos().flush();
                     ArrayList<Questions> a=(ArrayList<Questions>)cic.getOis().readObject();
                    StudentMessage s=(StudentMessage)cic.getOis().readObject();

                    Core= examModule.examOfRun(a);
                    message=s;
                    System.out.println(s);
                    System.out.println("考试完成");
                    break;
                case 2:
                    System.out.println("导出成绩");
                    cic.getOos().writeChar('o');
                    cic.getOos().flush();
                    System.out.println("导出成功");
                    break;
                case 3:
                    System.out.println(" [3]查询成绩");
                    cic.getOos().writeChar('p');
                    cic.getOos().flush();

                    System.out.println("学号为"+message.getS().getId()+"的成绩为"+Core);
                    break;
                case 0:
                    cic.getOos().writeChar('Z');
                    cic.getOos().flush();
                    return;
                default:
                    System.out.println("输入错误，请重新选择！");
            }
        }
    }



}
